/*
package cn.wolfcode.interceptor;

import cn.wolfcode.domain.Employee;
import cn.wolfcode.domain.JsonResult;
import cn.wolfcode.util.RequiredPermission;
import cn.wolfcode.util.UserContext;
import com.alibaba.fastjson.JSON;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

*/
/**
 * @Description: 权限拦截器
 * @Author: 伍家钰
 * @Date: 2020/7/13 19:12
 * @Version: 1.0
 *//*

public class PermissionInterceptor implements HandlerInterceptor {
    */
/**
     * 前置拦截方法
     *
     * @param request  :请求参数
     * @param response :响应参数
     * @param handler  :有可能是一些处理方法或者静态资源,所以是Object类型
     * @return :是否放行,false:不放行,true:放行
     *//*

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 1.获取当前用户
        Employee employee = UserContext.getCurrentUser();
        // 2.判断当前用户是否是超级管理员,超级管理员则放行,不是执行第三步.
        if (employee.isAdmin()) {
            return true;
        }
        // 3.获取当前要执行的方法,(被拦截的方法)
        */
/*判断handler是方法还是静态资源,如果前端控制器配置的路径是*.do,则不用判断*//*

        // if (handler instanceof HandlerMethod) {
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        // 4.判断是有贴自定义注解.是则执行第5步,不是则放行
        RequiredPermission methodAnn = handlerMethod.getMethodAnnotation(RequiredPermission.class);
        if (methodAnn == null) {
            // 没有贴注解表示方法是所有人访问的,放行
            return true;
        }
        // 5.获取目标处理方法的权限表达式(自定义注解中的属性值)
        String expression = methodAnn.expression();
        // 6.获取当前登入用户拥有的权限表达式的集合
        List<String> experssions = UserContext.getExperssions();
        // 7.判断当前登入用户是否包含目标处理方法的权限表达式,有则放行,没有则跳转到提示页面
        if (experssions.contains(expression)) {
            // 包含处理方法的权限表达式则放行
            return true;
        }
        // 判断方法是否使用RequestBody注解,因为删除方法使用了一个回调函数使用了异步请求,所以要响应json格式的数据
        if (!handlerMethod.hasMethodAnnotation(RequestBody.class)) {
            // 8.没有使用,跳转页面,不放行
            request.getRequestDispatcher("/WEB-INF/views/common/nopermission.jsp").forward(request, response);
        } else {
            // 响应jeson格式的数据
            JsonResult jsonResult = new JsonResult(false, "你没有操作权限!");
            // 设置响应的数据格式
            response.setContentType("application/json;charset=utf-8");
            response.getWriter().print(JSON.toJSONString(jsonResult));
        }
        //}
        return false;
    }
}
*/
